'''
数据存储在本地文件里面

对本地文件进行增删改查操作  ---  也是python知识大复习综合复习:


CURD



用python开发一个游戏 

坦克大战







'''


'''
学生管理系统实战开发

'''


class StudentSys():
    '''这个是学生关系系统程序的基类'''
    pass
    def __init__(self,num):
        '''这个是初始化方法'''
        self.num =num
        self.filename = 'student.txt'  #文件路径

    def test(self):
        '''这个是程序的入口 用来判定 用户输入的信息 123456 做出不同的选择'''
        if self.num == '1':
            '''
            录入信息  姓名 年龄 性别
            '''
            name  = input('请输入姓名:')
            age = input('请输入年龄:')
            sex =input('请输入性别:')
            self.add_stu(name,age,sex)
        elif self.num == '2':
            '''删除功能 name '''
            del_name = input('请输入用户姓名:')
            self.del_stu(del_name)
        elif self.num == '3':
            '''
            修改学生信息   name
            '''
            update_name = input('用户输入的姓名:')
            self.update_stu(update_name)
        elif self.num =='4':
            '''查询单个信息 name'''
            select_name =input('请输入查询的姓名:')
            self.select_one(select_name)
        elif self.num == '5':
            '''直接查询全部信息'''
            self.select_all()
        elif self.num == '6':
            exit()
        else:
            print('您输入的不对,请重新输入')

    def read_file(self):
        '''这个是读取文件的方法'''
        try:
            with open(self.filename,'r',encoding='utf-8') as f:
                lines = f.readlines()
                # print(lines)  # ['阿萨辛,18,男\n', '牡丹,18,男\n', '沙利亚,16,女\n']
                students =[i.strip().split(',') for i in lines]
                # print(students)
                return students
        except Exception:
            print("您输入的姓名不存在,请重新输入")

    def add_stu(self,name,age,sex):
        '''这个用来录入学生信息的方法   按1的时候进入这里'''
        print('开始录入信息')
        print(name, age, sex)  # 张三 18 男
        # 直接持久化存储 存储在文件之中  'student.txt'
        with open(self.filename,'a',encoding='utf-8') as f:
            f.write(f'{name},{age},{sex}\n')
        print(f'学生{name}录入成功')

    def del_stu(self,name):
        '''这个是删除学生信息的方法   按2 的时候进入这里'''
        print('开始删除信息')

        '''
        1,查询全部信息
        2,从全部信息中 去除用户输入的name
        3,把去除之后的信息重新写入文件
        SQL
        '''
        students = self.read_file()
        d_stu = [i for i in students if i[0] != name]
        # print(d_stu)

        with open(self.filename,'w',encoding='utf-8') as f1:
            for i in d_stu:
                f1.write(','.join(i) + '\n')
        print(f'您要删除的学生姓名{name},成功的删除了!!!!!!')

    def update_stu(self,name):
        '''这个是修改学生信息的方法  按3 的时候进入这里'''
        print("开始修改信息")
        # print(name)
        '''
        1, 读取全部信息
        2,找到name 这一条信息
        3,修改信息并且替换这一条
        4,重新写入文件  SQL
        '''

        students = self.read_file()
        new_stu = []
        for  i in students:
            if i[0] == name:
                print(f'查询成功,您要修改的学生姓名是:{name}---',i)
                new_name = input('请输入新的姓名:')
                new_age = input('请输入新的年龄:')
                new_sex = input('请输入新的性别:')
                new_stu.append([new_name,new_age,new_sex])
            else:
                new_stu.append(i)
        # print(new_stu)
        with open(self.filename,'w',encoding='utf-8') as f1:
            for i in new_stu:
                f1.write(','.join(i) + '\n')
        print(f'您要修改的学生姓名{name},修改成功')

    def select_one(self,name):
        '''这个是查询单个学生的方法 按4的时候进入这里'''
        print("开始查询单个信息")
        # print(name)
        students = self.read_file()
        for  i in students:
            if i[0] == name:
                print(f'查询成功,您查询的学生姓名是:{name},他的年龄是{i[1]},他的性别是{i[2]}')
                return False
        print('姓名不存在，请核对姓名')

    def select_all(self):
        '''这个是查询全部学生信息的方法 按5的时候进入这里'''
        print("开始全部学生信息")
        students = self.read_file()
        print('学生全部信息是：',students)


print('---------------------欢迎光临XX学生管理系统------------------------')
print('---------------------按1,录入学生信息------------------------------')
print('---------------------按2,删除学生信息------------------------------')
print('---------------------按3,修改学生信息------------------------------')
print('---------------------按4,查询指定学生信息--------------------------')
print('---------------------按5,查询全部学生信息---------------------------')
print('---------------------按6,退出学生管理系统---------------------------')
print('---------------------欢迎光临XX学生管理系统------------------------')
while 1:
    num = input("请选择[1,录入;2,删除;3,修改;4,查询单个;5,查询全部;6,退出]:")
    sms =StudentSys(num)
    sms.test()



